package PaqServidor;

import java.util.Vector;
import PaqServidor.Pregunta;
import java.util.ArrayList;

public class ExamenAlumno {
	//private String id;
	private ArrayList contestacion;
	private float nota;
	//public RespuestaPosible se_comprara;
	public ArrayList<Pregunta> listaPreguntas = new ArrayList<Pregunta>();

        public ExamenAlumno ()
        {
            
        }
        /**
         * Descripción: Constructor de la clase.
         * 
         * @param Preguntas 
         */
        public ExamenAlumno(ArrayList Preguntas) {
		listaPreguntas = Preguntas;
	}
        
        /**
         *  Descripción: método para obtener el valor del atributo id.
         * 
         * @return: id
         */
	/*public String getId() {
		return id;
	}*/

        /**
        * Descripción: método para establecer el valor del atributo id
        * 
        * @param id2
        */
	/*public void setId(String id2) {
		id = id2;
	}*/

        /**
         * Descripción: método para obtener el array de contestaciones.
         * 
         * @return 
         */
	public ArrayList getContestacion() {
		return contestacion;
	}

        /**
         * Definición: método para establecer el valor del array respuesta.
         * 
         * @param respuesta 
         */
	public void setContestacion(ArrayList respuesta) {
		contestacion = respuesta;
	}

	public float getNota() 
        {
            int aciertos = 0, fallos = 0;
            float valAcierto, valFallo;
            float notaT=0;
            int numPreguntas = listaPreguntas.size();
            
            // Recorremos las respuestas para determinar el número de aciertos
            // y el número de fallos
            for ( int i=0; i<numPreguntas; i++ )
            {
                if ( obtenerRespuesta(i, (Integer)contestacion.get(i)) == true )
                    aciertos++;
                else
                    fallos++;
            }
            
            /* Calculamos el valor de cada acierto y fallo en función del número
             de preguntas totales y teniendo en cuenta que la nota máxima 
             será 10 puntos */
            valAcierto = 10/numPreguntas;
            valFallo = valAcierto/2;
            notaT+= valAcierto*aciertos - valFallo*fallos;
            
            return notaT;
	}
        
        /**
         * Descripción: método que obtiene la nota del alumno y 
         * la almacena en el atributo nota.
         * 
         */
	public void setNota() {
		float not = getNota();
                nota = not;
	}

	public Pregunta mostrarPregunta(int numPregunta) {
		return listaPreguntas.get(numPregunta);
	}

        /**
         * Descripción: método que añade una respuesta al array de respuestas.
         * @param respuesta 
         */
	public void responder(int respuesta) {
		contestacion.add(respuesta);
	}

        /**
         * Descripción: método que obtiene si la contestación a una 
         * pregunta dada es correcta o incorrecta.
         * 
         * @param pregunta
         * @param contestacion
         * @return : true o false
         */
	public boolean obtenerRespuesta(int pregunta, int contestacion) {
		return listaPreguntas.get(pregunta).obtenerRespuesta(contestacion);
	}

	public Pregunta obtenerPregunta(int numPregunta) {
		return listaPreguntas.get(numPregunta);
	}
}